package com.pet.controller.webUser;

import com.pet.context.BaseContext;
import com.pet.dto.web.CheckResultDTO;
import com.pet.dto.web.PetAdoptInfoDTO;
import com.pet.pageDto.PetAdoptPageDTO;
import com.pet.result.PageResult;
import com.pet.result.Result;
import com.pet.service.PetAdoptService;
import com.pet.vo.web.PetAdoptApplicationVO;
import com.pet.vo.web.PetAdoptInfoVO;
import com.pet.vo.web.PetAdoptedInfoVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 宠物送养人操作及公共查询
 */
@RestController
@RequestMapping("/user")
@Slf4j
public class PetAdoptController {

    @Autowired
    private PetAdoptService petAdoptService;

    /**
     * 查询全部宠物送养信息
     * 分页查询
     */
    @PostMapping("/PetAdoptInfoList")
    public Result<PageResult> PetAdoptInfoList(@RequestBody PetAdoptPageDTO dto){
        log.info("分页查询宠物送养信息");
        PageResult pageResult = petAdoptService.pageQuery(dto);//获得数据总数 将内容分装成集合
        return Result.success(pageResult);
    }

    /**
     * 查询宠物送养详细信息
     */
    @GetMapping("/PetAdoptInfo")
    public Result<PetAdoptInfoVO> showPetAdoptInfo(@RequestParam Integer id){
        log.info("查询指定宠物送养详细信息:{}",id);

        return Result.success(petAdoptService.showPetAdoptInfo(id));
    }

    //送养人操作
    /**
     * 发布宠物送样信息
     */
    @PostMapping("/PetAdoptInfo")
    public Result PetAdoptInfo(@RequestBody PetAdoptInfoDTO dto){
        log.info("发布宠物送样信息:{}",dto);
        petAdoptService.postPetAdoptInfo(dto);
        return Result.success();
    }

    /**
     * 删除宠物送养信息
     */
    @DeleteMapping("/PetAdoptInfo")
    public Result deletePetAdoptInfo(@RequestParam Integer id){
        log.info("删除宠物送养信息:{}",id);
        petAdoptService.deletePetAdoptInfo(id);
        return Result.success();
    }

    /**
     * 修改宠物送养信息
     */
    @PutMapping("/PetAdoptInfo")
    public Result UpdatePetAdoptInfo(@RequestBody PetAdoptInfoDTO dto){
        log.info("修改宠物送养信息:{}",dto);
        petAdoptService.UpdatePetAdoptInfo(dto);
        return Result.success();
    }

    /**
     * 查询个人(他人)宠物送养信息
     * 根据用户id查询
     *
     * 数组
     */
    @GetMapping("/GetPetAdoptInfo")
    public Result<List<PetAdoptInfoVO>> GetPetAdoptInfo(@RequestParam(required = false) Integer userId){
        log.info("根据用户id查询:查询宠物送养信息:{}", BaseContext.getCurrentId());
        List<PetAdoptInfoVO> vo = petAdoptService.GetPetAdoptInfo(userId);
        return Result.success(vo);
    }

    /**
     * 审核送养申请
     */
    @PutMapping("/PetAdoptCheck")
    private Result PetAdoptCheck(@RequestBody CheckResultDTO dto){
        log.info("审核送养申请:{}",dto);
        petAdoptService.PetAdoptCheck(dto);

        return Result.success();
    }

    /**
     * 查询领养申请人信息
     */
    @GetMapping("/PetAdoptApplicationInfo")
    private Result<List<PetAdoptApplicationVO>> PetAdoptApplicationInfo(){
        log.info("查询领养申请");

        return Result.success(petAdoptService.PetAdoptApplicationInfo());
    }

    /**
     * 查询个人已经送养的宠物信息
     * 根据是否审核通过判断
     */
    @GetMapping("/PetAdoptApplicationInfoByStatus")
    private Result<List<PetAdoptedInfoVO>> PetAdoptApplicationInfoByStatus(){
        log.info("查询个人已经送养的宠物信息");

        return Result.success(petAdoptService.PetAdoptApplicationInfoByStatus());
    }
}
